
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
import org.w3c.dom.ls.LSOutput;

import java.util.Arrays;

/**
 * 数组  Array
 */
    public class 数组{
    //1.数组定义：4种，创建数组初始化【静态初始化：给定值|动态初始化：无给定值】
    @Test
    public void testArray() {
        //注意：数组定义长度，不能改变
        int[] arr1 = new int[4];//Java推荐写法 动态初始化
        int arr2[] = new int[4];//C推荐写法Java兼容 动态初始化
        int[] arr3 = {1, 2, 3};//静态初始化数组，元素可以直接使用
        int[] arr4 = new int[]{};//动态初始化
        //数组；内部存数据叫做元素
        //从arr3取出2的元素     数组名 下标
        System.out.println(arr3[1]);
        //从arr3的长
        System.out.println(arr3.length);
        //从arr4获取到 第四个元素值   数组下标越界异常：下标超出数组长度范围 wa'a
        //System.out.println(arr4[4]);//报错 ArrayIndexOutOfBoundsException
    }


    /**
     * 数组的迭代（遍历：输出数组所有值）三种
     * 1.普通迭代方式：for
     * 2.增强for方式：推荐，JDK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate() {
        int[] arr = {1, 2, 3, 4};//静态初始化数组   数组名[下标]
        for (int i = 0; i < arr.length; i++) {//拿数组下标
            System.out.println(arr[i]);
        }
        //增强for jdk1.5    遍历数组目的：拿元素值
        //     for (int j:arr){   //增强for语法：（遍历数据类型  引用：数组名）
        //       System.out.println(j);

        //
        //工具类：Arrays.toString();直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }


    /**
     * 数组扩容：数组长度是固定的，不可改变【可以使用扩容改数组长度】
     */
    @Test
    public void testCopy() {
        //字符数组   数组固定长度2个
        char[] arr = {'唐', '山'};  //想法：长度增加为4


        //扩容：增加4个     克隆新的数组
        char[] temp = Arrays.copyOf(arr, 4);
        arr = temp;
        arr[2] = '工';
        arr[3] = '业';
        System.out.println(arr);
        //需求：输出唐山工业

    }

    /**
     * 数组输出元素时，会有一些不同，【查看数据是否是数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays() {
        //字符数组
        char[] china = {'中', '国'};
        System.out.println(china);  //输出：中国   字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数组数值
        int[] i = {1, 2};
        System.out.println(i);  //输出：[ I数据类型@连接符3d82c5f3地址值
    }

    /**
     * 冒泡排序：双层for循环使用：外层for执行一次，执行全部
     */
    @Test
    public void buddleSort(){
        //静态初始化数组
        int[] arr={3,6,4,1}; //1,3,4,6
        //①外层for控制轮  i=0 1 2     3轮
        for (int i=0;i<arr.length;i++){
            //②内层for控制次  j= 3轮递减-[3~1]次
            for (int j=0;j< arr.length-1-i;j++){
                //③交换：第一个元素比第二个元素大，条件成立：交换【升序】
                if (arr[j]>arr[j+1]){//【相邻元素】 数组名[下标]
                    //创建第三方数组，接受   变量名：temp
                    int temp=arr[j];//大的元素交给第三方变量保存
                    arr[j]=arr[j+1];//第二个元素换给第一个元素位置
                    arr[j+1]=temp;  //保存第三方变量【大数】交给第二个元素
                }
            }
        }
        System.out.println(Arrays.toString(arr));//输出数组【遍历数据】

    }




  //输出数组【遍历数组】


    @Test
    public  void testSort(){
        int[] arr={3,6,4,1};
        //工具类Arrays.sort()方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }


}



